class CreateProductCollections < ActiveRecord::Migration
  #出库，入库的集合结算表，用来进行最后的结算。
  def self.up
    create_table :product_collections do |t|
      t.integer :company_id            ,:null => false             #所属公司的ID
      t.integer :department_id         ,:null => false             #操作此进库的员工所在的部门ID
      t.integer :employee_id           ,:null => false             #操作此进库的员工ID
      t.integer :customer_id                      #给哪个客户或从哪个客户
      t.integer :vendor_id                        #从哪个供应商进货。
      t.integer :logistics_id                     #物流公司
      t.integer :warehouse_id          ,:null => false             #从哪个仓库出库或调或入。
      t.integer :resource_id           ,:null => false             #多态ID，就是这个单据的ID
      t.string  :resource_type         ,:null => false             #多态类型，就是这个单据的类型，是出库单，还是入库单，还是拆分，还是调货
      t.integer :product_id            ,:null => false             #产品的ID
      t.integer :quantity              ,:null => false             #产品的数量
      t.decimal :unit_price , :null => false , :precision => 20, :scale => 10  ,:default => 0       #进货时的单价，暂时放着，可能没用。
      t.decimal :discount     ,:precision => 5 , :scale => 3  ,:default => 1.0    #折扣
      t.decimal :amount       ,:precision => 10, :scale => 2  ,:default => 0      #总价格
      t.decimal :unit_amount  ,:precision => 10, :scale => 2  ,:default => 0      #每个套装或单品的总价格(就是真实的卖价或采价乘以数量，即这次操作的总价)

      t.decimal :tax_price    ,:null => false , :precision => 10, :scale => 2  ,:default => 0   #含税单价
      t.decimal :value_added_tax  ,:null => false , :precision => 10, :scale => 2  ,:default => 0   #增值税
      t.decimal :tax_amount  ,:null => false, :precision => 10, :scale => 2  ,:default => 0   #含税总价格

      t.date :action_date                 #执行操作的真实日期，此字段是为从建结算表时准备的。以代表每一个操作的真实时间
      t.integer :sale_order_id                        #这是销售订单ID
      t.integer :purchase_order_id                    #这是采购订单ID
      t.integer :warehousing_entry_id                 #这是入库单ID，为索赔服务
      t.integer :loan_id                              #这是入库单ID，为索赔服务
      t.integer :claim_id                             #索赔订单的ID
      t.string  :description                          #写一些备注之类的信息
      t.string  :auditing_status  ,:default => ""     #审批状态，以排除预出库的数量
      t.integer :is_suit     ,:limit => 1 , :default => 0 #判断一个产品是不是套装。
      t.integer :is_top      ,:limit => 1 , :default => 0 #判断一个产品是附属还是最顶端。
      t.integer :is_locked   ,:limit => 1 , :default => 0 #锁定 1为True 0为False
      t.timestamps
    end
  end

  def self.down
    drop_table :product_collections
  end
end
